home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 050 / bix03.arc / TOKERING.PAS < prev    next >
Pascal/Delphi Source File  |  1986-08-04  |  3KB  |  88 lines

  1. {TITLE: TOKEN RING/TURBO PASCAL}
  2.  
  3.  
  4. (*      TURBO PASCAL PROCEDURES FOR LOCKING/UNLOCKING RECORDS        *)
  5.  
  6.  
  7. { The following procedures are for use on either the IBM PC Network   }
  8. { or the IBM Token Ring Network.  PC-DOS 3.1 (3.2 for the Token Ring) }
  9. { is required.                                                        }
  10.  
  11. { When locking a record in a file, care should be taken to remember   }
  12. { the location that is locked.  Failing to unlock an area of a file   }
  13. { (or trying to unlock an area that is not locked) can be messy.      }
  14.  
  15.  
  16.  
  17. Procedure LockRecord(var return_code : integer;
  18.                      handle,       {file handle...from Turbo FIB}
  19.                      loc_hiword,   {most sig. 2 bytes of offset into file}
  20.                      loc_loword,   {and least sig. 2 bytes}
  21.                      len_hiword,   {most sig. 2 bytes of record length}
  22.                      len_loword : integer); { & least sig. 2 bytes}
  23.  
  24. {the file handle is the first 2 bytes of the Turbo FIB}
  25.  
  26. {the loc_hiword and loc_loword comprise a 4-byte offset into the}
  27. {file, telling where the lock should be placed}
  28.  
  29. {the len_hiword and len_loword parameters comprise a 4-byte length}
  30. {saying how much of the file should be locked at that location.}
  31.  
  32. Type
  33.    DOSRegs  = record
  34.      Case Integer of
  35.        0: (ax, bx, cx, dx, bp, si, di, ds, es, Flags : Integer);
  36.        1: (al, ah, bl, bh, cl, ch, dl, dh            : Byte   );
  37.        End;
  38. Var
  39.    registers : DOSRegs;
  40. Begin
  41.   fillchar (registers, sizeof(registers), 00);
  42.   with registers do
  43.        Begin
  44.          ah := $5C;
  45.          al := $00;          {to lock}
  46.          bx := handle;
  47.          cx := loc_hiword;
  48.          dx := loc_loword;
  49.          si := len_hiword;
  50.          di := len_loword;
  51.          End;
  52.   MSDOS (registers);
  53.   return_code := registers.ax;
  54.   End;
  55.  
  56.  
  57.  
  58. Procedure UnLockRecord(var return_code : integer;
  59.                        handle,       {file handle...from Turbo FIB}
  60.                        loc_hiword,   {most sig. 2 bytes of offset into file}
  61.                        loc_loword,   {and least sig. 2 bytes}
  62.                        len_hiword,   {most sig. 2 bytes of record length}
  63.                        len_loword : integer); { & least sig. 2 bytes}
  64.  
  65. Type
  66.    DOSRegs  = record
  67.      Case Integer of
  68.        0: (ax, bx, cx, dx, bp, si, di, ds, es, Flags : Integer);
  69.        1: (al, ah, bl, bh, cl, ch, dl, dh            : Byte   );
  70.        End;
  71. Var
  72.    registers : DOSRegs;
  73. Begin
  74.   fillchar (registers, sizeof(registers), 00);
  75.   with registers do
  76.        Begin
  77.          ah := $5C;
  78.          al := $01;            {to unlock}
  79.          bx := handle;
  80.          cx := loc_hiword;
  81.          dx := loc_loword;
  82.          si := len_hiword;
  83.          di := len_loword;
  84.          End;
  85.   MSDOS (registers);
  86.   return_code := registers.ax;
  87.   End;
  88.